package yannan.voiplock4ble.service.ble;

/**
 * 链接本地库生成命令的工具类
 */
public class BleUtils {
    /**
     * 连接门锁
     */
    public final static int ORDER_CONNECT_LOCK = 0x10;
    /**
     * 获取门锁信息
     */
    public final static int ORDER_GET_LOCK_INFO = 0x04;
    /**
     * 注册密码
     */
    public final static int APP_REGISTER_PWD_ID = 0x0D;
    /**
     * 获取密码列表
     */
    public final static int APP_GET_PW_LIST_ID = 0x05;
    /**
     * 获取门锁时间
     */
    public final static int APP_GET_LOCK_TIME_ID = 0x08;
    /**
     * 设置门锁时间
     */
    public final static int APP_SET_LOCK_TIME_ID = 0x0A;
    /**
     * 获取开锁记录
     */
    public final static int APP_GET_UNLOCK_RECORD_ID = 0x07;
    /**
     * 注册指静脉
     */
    public final static int APP_REGISTER_FINGER_ID = 0x0B;
    /**
     * 指静脉列表（全部）
     */
    public final static int APP_GET_FINGER_LIST_ID = 0x06;
    /**
     * 删除指静脉
     */
    public final static int APP_DELETE_FINGER_ID = 0x0C;
    /**
     * 删除密码
     */
    public final static int APP_DELETE_PWD_ID = 0x0E;
    /**
     * 启用禁用密码
     */
    public final static int APP_OPEN_AND_CLOSE_PWD_ID = 0x0F;
    /**
     * 启用禁用指静脉
     */
    public final static int APP_OPEN_AND_CLOSE_FINGER_ID = 0x11;
    /**
     * 管理员权限操作
     */
    public final static int APP_ADMIN_AUTHORITY_OPER_ID = 0x12;
    /**
     * 修改管理员密码
     */
    public final static int APP_MODIFY_ADMIN_PW_OPER_ID = 0x13;
    /**
     * 远程升级命令
     */
    public final static int REMOTE_UPGRADE_ID = 0x51;

    /**
     * 远程升级命令响应
     */
    public final static int Remote_Upgrade_ACK_ID = REMOTE_UPGRADE_ID | 0x80;

    public final static int APP_Send_Upgrade_Pkt_ID = 0x52;
    /**
     * 发送升级包响应
     */
    public final static int APP_Send_Upgrade_Pkt_ACK_ID = APP_Send_Upgrade_Pkt_ID | 0x80;

    /**
     * 通知门锁执行更新
     */
    public final static int APP_Upgrade_complete_ID=0x53;
    /**
     * 门锁执行更新响应
     */
    public final static int APP_Upgrade_complete_ACK_ID = APP_Upgrade_complete_ID | 0x80;






    /**
     * 初始化时调用，只用调用一次就行
     */
    public static native void init();


    /**
     * 向库中缓冲区放入一个字节
     *
     * @param b
     */
    public static native void putByte(byte b);

    /**
     * 从缓冲区中取出一条报文 如果没有则为空或者长度为0
     *
     * @return
     */
    public static native byte[] getResponse();

    /**
     * 链接网关
     *
     * @param phoneUum
     * @return
     */
    public static native byte[] connectLock(byte[] phoneUum);

    /**
     * 获取门锁信息（协议中为电量）
     *
     * @param token
     * @return
     */
    public static native byte[] getElec(int token);

    /**
     * 获取密码用户
     *
     * @param token
     * @return
     */
    public static native byte[] getPwdUser(int token);

    /**
     * 获取指静脉列表
     *
     * @param token
     * @param type  0：管理员 1：普通用户
     * @return
     */
    public static native byte[] getFingerUser(int token, int type);

    /**
     * 注册指静脉
     *
     * @param token
     * @param phoneUum 手机号
     * @param type     0：管理员 1：普通用户
     * @return
     */
    public static native byte[] registerFinger(int token, byte[] phoneUum, int type);

    /**
     * 注册密码
     *
     * @param token
     * @return
     */
    public static native byte[] registerPwd(int token);

    /**
     * 获取开锁记录
     *
     * @param token
     * @param startTime 时间戳 精确到秒
     * @param endTime
     * @return
     */
    public static native byte[] getUnlockRecord(int token, int startTime, long endTime);

    /**
     * 获取门锁时间
     *
     * @param token
     * @return
     */
    public static native byte[] getLockTime(int token);

    /**
     * 设置门锁时间
     *
     * @param token
     * @param time
     * @return JNIEXPORT jbyteArray JNICALL Java_yannan_voiplock4ble_service_ble_BleUtils_setLockTime
     * (JNIEnv *env, jclass jobj, jint token, jint year, jint month, jint day, jint hour,
     * jint minute, jint second)
     */
    public static native byte[] setLockTime(int token, int year, int month, int day, int hour, int minute, int second);

    /**
     * 删除指静脉
     *
     * @param token
     * @param phoneNum
     * @return
     */
    public static native byte[] delFingerUser(int token, byte[] phoneNum, int templeteID, int templateGroupID);

    /**
     * 删除密码用户
     *
     * @param token
     * @param userId
     * @return
     */
    public static native byte[] deletePwdUser(int token, int userId);

    /**
     * 开闭密码
     *
     * @param token
     * @param userId   密码用户ID，若为FF，表示全部密码用户
     * @param operType 00：启用密码功能 01：关闭密码功能
     * @return
     */
    public static native byte[] operPwdUser(int token, int userId, int operType);

    /**
     * 开闭指静脉
     *
     * @param token
     * @param phoneNum 手机号，若全部为0xFF，表示全部指静脉用户
     * @param operType 00：启用指静脉功能 01：关闭指静脉功能
     * @return
     */
    public static native byte[] operFingerUser(int token, byte[] phoneNum, int operType, int templateGroupID, int templeteID);

    /**
     * 分配管理员权限
     *
     * @param token
     * @param phoneNum
     * @param operType 00：分配管理员权限 01：取消管理员权限
     *                 <p>
     *                 jint templateGroupID,jint templeteID
     * @return
     */
    public static native byte[] operFingerAdminUser(int token, byte[] phoneNum, int operType, int templateGroupID, int templeteID);

    /**
     * 发送升级命令
     *
     * @param token
     * @param pkgType    模块  0:控制模块  1:识别模块
     * @param pkgSize
     * @param pkgVersion 版本号
     * @param pkg
     * @return
     */
    public static native byte[] update(byte[] pkg, byte[] pkgVersion, int token, int pkgType, int pkgSize);

    /**
     * 发送升级包
     *
     * @param pkg
     * @param token
     * @return
     */
    public static native byte[] sendUpdatePkt(byte[] pkg, int pktSn, int lent, int token);

    /**
     * 发送确认升级命令
     *
     * @param token
     * @return
     */
    public static native byte[] startUpdate(int token);

    /**
     * 修改管理员密码
     *
     * @param token
     * @return
     */
    public static native byte[] changeAdminPwd(int token);

    static {
        //调用.so文件,引入打包库
        System.loadLibrary("YnLockJni");
    }
}
